import java.util.Arrays;

/**
 * @author Laurie
 */
public class MyStack<T>{
    private Object[] stack;
    private int size;
    /**
     * 初始化栈容量为20
     */
    public MyStack() {
        stack = new Object[20];
    }

    /**
     *实现栈容量的扩增
     * @param s 扩增后的栈容量
     */
    public void expandStack(int s){
        int length = stack.length;
        if(length < s){
            stack = Arrays.copyOf(stack,s);
        }
    }

    /**
     * 实现入栈操作
     * @param e 需要入栈的数据
     */
    public void push(T e){
        expandStack(size+1);
        stack[size] = e;
        size ++;
    }

    /**
     * 返回栈顶的第一个元素的值
     * @return 栈顶元素的值
     */
    public T back(){
        T e = null;
        if(size > 0){
            e = (T) stack[size - 1];
        }
        return e;
    }

    /**
     * 实现出栈的操作
     * @return 栈顶元素
     */
    public T pop(){
        T e = back();
        if(size > 0){
            stack[size - 1] = null;
            size --;
        }
        return e;
    }

    /**
     * 判断栈是否为空
     * @return 栈是否为空
     */
    public boolean isEmpty(){
        return size == 0;
    }

}
